bfc542961446b8de587de32fd88de902123614d1,sonar-server/src/main/java/org/sonar/server/rule/RegisterRules.java,RegisterRules,mergeParams,#RulesDefinition.Rule#RuleDto#DbSession#,291

Before Change



  private void mergeParams(RulesDefinition.Rule ruleDef, RuleDto rule, DbSession session) {
    List<RuleParamDto> paramDtos = dbClient.ruleDao().findRuleParamsByRuleKey(session, rule.getKey());
    List<String> existingParamDtoNames = new ArrayList<String>();

    for (RuleParamDto paramDto : paramDtos) {
      RulesDefinition.Param paramDef = ruleDef.param(paramDto.getName());
      if (paramDef == null) {
        // TODO cascade on the activeRule upon RuleDeletion
        dbClient.ruleDao().removeRuleParam(session, rule, paramDto);
      } else {
        // TODO validate that existing active rules still match constraints
        // TODO store param name
        if (mergeParam(paramDto, paramDef)) {
          dbClient.ruleDao().updateRuleParam(session, rule, paramDto);
        }
        existingParamDtoNames.add(paramDto.getName());
      }
    }
    for (RulesDefinition.Param param : ruleDef.params()) {
      if (!existingParamDtoNames.contains(param.key())) {
        RuleParamDto paramDto = RuleParamDto.createFor(rule)
          .setName(param.key())
          .setDescription(param.description())

After Change



    // Create newly parameters
    for (RulesDefinition.Param param : ruleDef.params()) {
      RuleParamDto paramDto = existingParamsByName.get(param.key());
      if (paramDto == null) {
        paramDto = RuleParamDto.createFor(rule)
          .setName(param.key())
          .setDescription(param.description())